const ID = '__FBA_FILE_PICK__'

/** 附件选择，通常用于导入功能 */
export const filePick = ({
  accept,
  multiple,
  onFilePick,
}: {
  /**
   * 附件类型限制，统一使用后缀名
   * @example `.xls,.xlsx,.xlsm`
   */
  accept?: string
  /**
   * 是否允许多选
   */
  multiple?: boolean
  /**
   * 附件选择回调
   */
  onFilePick: (files: File[]) => void
}) => {
  // 尝试清理
  document.getElementById(ID)?.remove()

  // 属性
  const inp = document.createElement('input')
  inp.id = ID
  inp.type = 'file'
  inp.style.display = 'none'
  if (accept && typeof accept === 'string') {
    inp.accept = accept
  }
  if (multiple) {
    inp.multiple = true
  }

  // 事件
  inp.addEventListener('click', e => e.stopPropagation())
  inp.addEventListener('change', () => {
    try {
      const { files } = inp
      if (files) {
        onFilePick(Array.from(files))
      }
    } catch (err) {
      setTimeout(() => {
        throw err
      }, 0)
    }
    document.getElementById(inp.id)?.remove()
  })

  // 触发
  document.body.appendChild(inp)
  setTimeout(() => {
    inp.click()
  }, 66)
}
